home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 26 / Cream of the Crop 26.iso / program / p063b9s.zip / UTIL / LOGCUT.PAS < prev    next >
Pascal/Delphi Source File  |  1994-01-07  |  6KB  |  202 lines

  1. PROGRAM LogCut;
  2. {╔══════════════════════════════════════════════════════════════════════════╗}
  3. {║ Removes logentries older than x days          Last changed: 07.01.94  SA ║}
  4. {║                                                                          ║}
  5. {║                         (C) Copyright 1989-94 by                         ║}
  6. {║       Dan Wulff, Jens Sandalgaard, Steen Christensen & S¢ren Ager        ║}
  7. {║                                                                          ║}
  8. {║ This source can be distributed freely, as long as it is done in a        ║}
  9. {║ lawfull and friendly manner.                                             ║}
  10. {╚══════════════════════════════════════════════════════════════════════════╝}
  11. USES Dos, OpString, OpDate, OpStrDev, UnixDate, PoPTypes;
  12.  
  13. CONST
  14.   MonthName      : ARRAY[1..12] OF String[3] = ('Jan', 'Feb', 'Mar', 'Apr',
  15.                                                 'May', 'Jun', 'Jul', 'Aug',
  16.                                                 'Sep', 'Oct', 'Nov', 'Dec');
  17.  
  18.  
  19.   PROCEDURE Copyright;
  20.   BEGIN
  21.     WriteLn('Log cutter v'+Ver);
  22.     WriteLn('(c) Copyright 1993 by The Portal Team');
  23.     WriteLn;
  24.   END;
  25.  
  26.   PROCEDURE ShowHelp;
  27.   BEGIN
  28.     WriteLn('USAGE:   LogCut Days {LogFile}');
  29.     WriteLn;
  30.     WriteLn('EXAMPLE: LogCut 7 Portal01.Log Portal02.Log');
  31.     WriteLn;
  32.   END;
  33.  
  34.   FUNCTION ConvertDate(DateStr : String) : LongInt;
  35.   VAR
  36.     MonthNow,
  37.     Year, Month, Day, DoW,
  38.     Hour, Min, Sec : Word;
  39.     Temp           : String[5];
  40.     ok             : Integer;
  41.   BEGIN
  42.     IF Length(DateStr)<>15 THEN
  43.     BEGIN
  44.       Convertdate:=0;
  45.       Exit;
  46.     END;
  47.     GetDate(Year, MonthNow, Day, DoW);
  48.     Temp := Copy(DateStr, 1, 2);
  49.     Val(Temp, Day, ok);
  50.     Temp := Copy(DateStr, 4, 3);
  51.     Month := 1;
  52.     WHILE (Month < 12) AND (MonthName[Month] <> Temp) DO
  53.       Inc(Month);
  54.     IF Month = 13 THEN
  55.     BEGIN
  56.       ConvertDate := 0;
  57.       Exit;
  58.     END;
  59.     IF MonthNow<Month THEN Dec(Year);
  60.     Temp := Copy(DateStr, 8, 2);
  61.     Val(Temp, Hour, ok);
  62.     Temp := Copy(DateStr, 11, 2);
  63.     Val(Temp, Min, ok);
  64.     Temp := Copy(DateStr, 14, 2);
  65.     Val(Temp, Sec, ok);
  66.     ConvertDate := GetUnixDate(Year, Month, Day, Hour, Min, Sec);
  67.   END;
  68.  
  69.   PROCEDURE ReadLine(VAR f: File; VAR s: String);
  70.   VAR
  71.     OldPos : LongInt;
  72.     Buf    : Array[0..254] Of Char;
  73.     Test   : Integer;
  74.     i      : Byte;
  75.   BEGIN
  76.     S:='';
  77.     OldPos:=FilePos(f);
  78.     BlockRead(f,Buf,SizeOf(Buf),Test);
  79.     i:=0;
  80.     WHILE (Test<>0) And (i<Test) AND (Buf[i]<>#10) DO
  81.     BEGIN
  82.       IF (Buf[i]<>#10) AND (Buf[i]<>#13) THEN S:=S+Buf[i];
  83.       Inc(i);
  84.     END;
  85.     Seek(f,OldPos+i+1);
  86.     IF IoResult<>0 THEN ;
  87.   END;
  88.  
  89.   PROCEDURE WriteLine(VAR f: File; s: String);
  90.   BEGIN
  91.     s:=s+#13#10;
  92.     BlockWrite(f, s[1], Length(s));
  93.   END;
  94.  
  95.   FUNCTION UnixToDateStr(UDate: LongInt): String;
  96.   VAR
  97.     Year, Month, Day,
  98.     Hour, Min, Sec    : Word;
  99.     MinStr, SecStr    : String[3];
  100.   BEGIN
  101.     UnPackUnix(UDate, Year, Month, Day, Hour, Min, Sec);
  102.     Str(Min,MinStr);
  103.     If Min<10 THEN MinStr:='0'+MinStr;
  104.     Str(Sec,SecStr);
  105.     If Sec<10 THEN SecStr:='0'+SecStr;
  106.     Write(TpStr,Day, '/', Month, '-', Year, '  ', Hour, ':', MinStr, ':', SecStr);
  107.     UnixToDateStr:=ReturnStr;
  108.   END;
  109.  
  110.   PROCEDURE CutTheLogs;
  111.   VAR
  112.     Days, i : Byte;
  113.     Err  : Integer;
  114.     Line,
  115.     OldestDate : LongInt;
  116.     BufSize, Read,
  117.     Hour, Min, Sec, Sec100,
  118.     Day, Month, Year, DoW : Word;
  119.     LogFile, f : File;
  120.     InStr   : STRING;
  121.     Buf     : Pointer;
  122.   BEGIN
  123.     Val(ParamStr(1), Days, Err);
  124.     IF Err=0 THEN
  125.     BEGIN
  126.       GetTime(Hour, Min, Sec, Sec100);
  127.       GetDate(Year, Month, Day, DoW);
  128.       OldestDate:=GetUnixDate(Year, Month, Day, Hour, Min, Sec)-(LongInt(Days)*60*60*24);
  129.       WriteLn('Deleting logentries before: ',UnixToDateStr(OldestDate));
  130.       WriteLn;
  131.       FOR i:=2 TO ParamCount DO
  132.       BEGIN
  133.         Assign(LogFile, ParamStr(i));
  134.         Reset(LogFile, 1);
  135.         IF IOResult=0 THEN
  136.         BEGIN
  137.           WriteLn('Cutting: '+ParamStr(i));
  138.           Line:=1;
  139.           ReadLine(LogFile, InStr);
  140.           IF (Trim(InStr)<>'') AND (ConvertDate(Copy(InStr, 3, 15))>0) THEN
  141.           BEGIN
  142.             WHILE ConvertDate(Copy(InStr, 3, 15))<OldestDate DO
  143.             BEGIN
  144.               Write('Analyzing: ',Line:5,#13);
  145.               Inc(Line);
  146.               ReadLine(LogFile, InStr);
  147.             END;
  148.  
  149.             IF ConvertDate(Copy(InStr, 3, 15))>=OldestDate THEN
  150.             BEGIN
  151.               Assign(f, ForceExtension(ParamStr(i),'LC$'));
  152.               ReWrite(f,1);
  153.               WriteLine(f, InStr);
  154.               IF MaxAvail>$fff0 THEN BufSize:=$fff0 ELSE BufSize:=MaxAvail-1024;
  155.               GetMem(Buf, BufSize);
  156.               Line:=0;
  157.               REPEAT
  158.                 BlockRead(LogFile, Buf^, BufSize, Read);
  159.                 BlockWrite(f, Buf^, Read);
  160.                 Err:=IOResult;
  161.                 Inc(Line, Read);
  162.                 Write('Copying  : ',Line:8,#13);
  163.               UNTIL (Read<>BufSize) OR (Err<>0);
  164.               FreeMem(Buf, BufSize);
  165.               Close(f);
  166.               Close(LogFile);
  167.               IF Err=0 THEN
  168.               BEGIN
  169.                 Erase(LogFile);
  170.                 Rename(f, ParamStr(i));
  171.               END ELSE
  172.               BEGIN
  173.                 Erase(f);
  174.                 WriteLn('Error writing temp file');
  175.               END;
  176.             END ELSE
  177.             BEGIN
  178.               Close(LogFile);
  179.               WriteLn('Nothing to do!');
  180.             END;
  181.             WriteLn;
  182.           END ELSE
  183.           BEGIN
  184.             Close(LogFile);
  185.             WriteLn('Unknown logdate in: '+ParamStr(i)+' - skipping file!');
  186.           END;
  187.         END ELSE
  188.           WriteLn('Error opening: '+ParamStr(i));
  189.         WriteLn;
  190.       END;
  191.     END ELSE
  192.       ShowHelp;
  193.   END;
  194.  
  195. BEGIN
  196.   Copyright;
  197.   IF ParamCount>1 THEN
  198.     CutTheLogs
  199.   ELSE
  200.     ShowHelp;
  201. END.
  202.